/***************************************************************************
 *   Copyright (C) 2008 by Ryszard KrÃÂ³l   *
 *   rysiek.krol@gmail.com   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#ifndef IMAGEREADER_H
#define IMAGEREADER_H
#include <QMutex>
#include <QThread>
#include <QList>
#include <QWaitCondition>


class QDir;
class PictureListWidgetItem;
class PictureManager;
class QFileInfo;
class QString;
class QImage;
class QListWidgetItem;
/**
	@author Ryszard Krol <rysiek.krol@gmail.com>
*/

class ImageReader : public QThread
{
    Q_OBJECT
public:
    enum Action {ReadDir=0, SortItems=1};

    ImageReader ( PictureManager *manager, QDir *dir );

    ~ImageReader();
    /**
    * WaitCondition do budzenia watku
    */
    QWaitCondition readDirCondition;
    /**
    * Mutex do QWaitCondition
    */
    QMutex waitMutex;
    /**
    * Ustawia zmienna isActive
    */
    void setIsActive ( bool theValue );
    /**
    * Ustawia zmienna curDir (aktualny katalog)
    */
    void setDir ( QDir* theValue );
    /**
    * Metoda zwracajaca zmienna isActive
    */
    bool active();
    /**
    * Metoda zwraca aktualnie ustawiony katalog
    */
    QDir* getDir() const;

    bool getReadingDir() const;

    void setSelectedItem ( QFileInfo* theValue );

    void setAction ( const ImageReader::Action& theValue );

    void setWidgetList ( QList< PictureListWidgetItem * >* theValue );

private:
    /**
    * Wskaznik do klasy GUI
    */
    PictureManager *manager;
    /**
    * Mutex do isActiv'a
    */
    QMutex mutex;
    /**
    * Zmienna przechowuje aktualny katalog
    */
    QDir *dir;
    bool isActive;
    /**
      * SendIconGenerationCompleateEvent is used to start reader once more, when user change dir before
      * reader can generates all icons
      */
    bool sendIconGenerationCompleateEvent;
    void sortItems ( QList<PictureListWidgetItem*> *lista, int beg, int end );
    void generateItems();
    bool compareItems ( PictureListWidgetItem *firstItem, PictureListWidgetItem *secondItem );
    bool readingDir;
    QList<PictureListWidgetItem*> *widgetList;
    ImageReader::Action action;

protected:
    void run();
};
#endif
